Vehicles operating in an autonomous mode (e.g., driverless) can relieve occupants, especially the driver, from some driving-related responsibilities. When operating in an autonomous mode, the vehicle can navigate to various locations using onboard sensors, allowing the vehicle to travel with minimal human interaction or in some cases without any passengers.
Most of autonomous driving vehicles (ADVs) are controlled using autonomous driving modules hosted by an operating system such as a robotic operating system (ROS). Existing robotics approach based autonomous driving systems are implemented using a revised robotics operating system that suffers from a variety of deficiencies including difficult to deploy, difficult to be used in debugging, and output inconsistent results for different operations on the same input. A robotics based system requires modifying some kernel level code of the operating system to guarantee that it is running in real time.
An autonomous driving system consists of several modules communicating with each other frequently. Thus, how to coordinate and orchestrate the interaction among different modules becomes a core problem of designing an efficient and robust autonomous driving system. The existing solution is mostly decentralized (meaning that each module runs as a long running process), and employs a publisher-subscriber model of message passing. The multi-process model of modules shares all the resources underneath and may suffer from a race condition for limited resources. Under a multi-process environment, messages are transmitted using a publication/subscription channel over a network. In practice, this approach added input/output (IO) overhead to the system and is a major source of inconsistency of system behaviors.
Modules are independent and keep running in one process forever, which makes failover hard to implement. By its nature, each module resides in its own process space and keeps many of its own states, which makes it impossible to recover when anything wrong happens within the module. As a result, the decentralized and distributed system architecture cannot enjoy the advantage of robustness such a system usually has. Even worse, each module in this system could potentially become a single point of failure, which is lethal to an autonomous driving system.
An existing robotics-based autonomous driving system utilizes a decentralized method for data storage and communication. It requires copying result data from one module to another, which may increase the delay. The communication protocol to transmit data, like TCP/IP, may create redundant packet head, which is also inefficient. The existing system adds a lock on data storage since it is written and read via multiple threads. This might result in a deadlock, which requires extra methods to handle. As a result, the existing system is not able to provide consistent outputs with the same input since there is no time bound the communications. Delay of communication will result in inconsistent results.